#ifndef ERROR_H
#define ERROR_H

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define ER_POINT_VIRGULE		1 	// Erreur sur un point virgule
#define ER_PARENTHESE_FERMANTE		2	// Il manque la fin de parenthèse
#define ER_ID_ENT_REEL_CHAINE		3	// Il manque soit un entier, soit un reel soit une chaine
#define ER_POINT_VIRGULE_END		4  	// Manque un ; ou un end
#define ER_AFFECTATION			5	// Erreur :=
#define ER_EGUAL			6	// Erreur =
#define ER_ENT_REEL_CHAINE_CAR		7	// MAnque entier ou reel ou chaine de caractère ou un caractère
#define ER_IDENTIFICATEUR		8	// MAnque un identificateur
#define ER_DOUBLE_POINT			9	// Erreur :
#define ER_TYPE				10	// Erreur sur le type (integer, real, string, char, boolean)
#define ER_BEGIN			11	// MAnque begin
#define ER_CODE_APRES_POINT		12	// Du code après le end.
#define ER_POINT			13	// On attend un .
#define ER_END_POINT_VIRGULE		14	// On attend un end ou un ;
#define ER_PARENTHESE_OUVRANTE		15	// Erreur sur une parenthèse ouvrante
#define ER_SEPARATEUR			16	// Erreur sur un séparateur
#define ER_PARENTHESE_FERMANTE_VIRGULE	17	// On attend ) ou ,
#define ER_PROGRAM			18	// Il manque 'program' au début:
#define ER_DO				19	// Erreur sur le do du while
#define ER_OPER_LOGIQUE			20	// Erreur sur une opérande logique
#define ER_THEN				21	// Erreur, manque le then
#define ER_BLOC_CONSTANTE_DECLARE	22 	// Le bloc des constantes est déja déclaré
#define ER_BLOC_VARIABLE_DECLARE	23	// Idem pour les variables
#define ER_DECLARATION			24	// Une erreur entre entre PROGRAM et le begin général
#define ER_PARAM_FONCTION		25	// Les paramètres de la fonction sont incorrectes
#define ER_PARAM_PROCEDURE		26	// Les paramètres de la procédure sont incorrectes
#define ER_TYPE_FONCTION		27	// Type de retour 
#define ER_MANQUE_RETURN		28	// Manque le retour de la fonction
#define ER_TO				29	// Le to de la boucle for est manquant
#define ER_INIT_FOR			30	// après le to, il doit y avoir un entier ou un reel
#define ER_ID				31	// Erreur, on attend un identificateur
#define ER_ID_DEJA_DECLARE		32	// Identificateur déjà déclaré
#define ER_AFFECTATION_OR_FONCTION	33	// Affectation ou fonction manquant
#define ER_ID_PAS_DECLARE		34	// Variable non déclarée
#define ER_AFFECTATION_STO_CST		35	// Affectation impossible à une constante
#define ER_ELSE				36	// Erreur sur un else
#define ER_EXEC				37	// Erreur lors de l'execution du p_code
#define ER_FOR				38	// Erreur sur la boucle for
#define ER_WHILE			39	// Erreur sur la boucle while
#define ER_COND				40	// Erreur sur une condition
#define ER_OPERATION			41	// Erreur sur L'opération
#define ER_AFFECTATION_STO		42	// Affectation impossible
#define ER_EXEC_PROCEDURE		43	// Erreur, x:=procedure()
#define ER_OP				44	// Erreur sur un opérateur arithmétique ou logique
#define ER_INP				45	// Erreur lors de la saisie de données clavier
#define ER_COUNTER			46	// Erreur d'initialisation du compteur ordinal
#define ER_PCODE			47	// Erreur d'initialisation du fichier pcode

void display(int error, char* buffer); 		// Affichage de l'erreur
#endif
